// Copyright 2019 Google LLC.
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#ifndef SkTextBlobTrace_DEFINED
#define SkTextBlobTrace_DEFINED

#include "include/core/SkTypes.h"

#include "include/core/SkPaint.h"
#include "include/core/SkPoint.h"
#include "include/core/SkStream.h"
#include "include/core/SkTextBlob.h"
#include "src/core/SkWriteBuffer.h"
#include "src/text/GlyphRun.h"

#include <cstdint>
#include <vector>

namespace SkTextBlobTrace {
struct Record {
    uint32_t origUniqueID;
    SkPaint paint;
    SkPoint offset;
    sk_sp<SkTextBlob> blob;
};

std::vector<SkTextBlobTrace::Record> CreateBlobTrace(SkStream *stream, sk_sp<SkFontMgr> lastResortMgr);

void DumpTrace(const std::vector<SkTextBlobTrace::Record> &);

class Capture {
public:
    Capture();
    ~Capture();
    void capture(const sktext::GlyphRunList &, const SkPaint &);
    // If `dst` is nullptr, write to a file.
    void dump(SkWStream *dst = nullptr) const;

private:
    size_t fBlobCount = 0;
    sk_sp<SkRefCntSet> fTypefaceSet;
    SkBinaryWriteBuffer fWriteBuffer;

    Capture(const Capture &) = delete;
    Capture &operator = (const Capture &) = delete;
};
} // namespace SkTextBlobTrace
#endif // SkTextBlobTrace_DEFINED
